A relational database management system (RDBMS) offers users of the system increased functionality and flexibility over traditional methods of organizing and accessing data. However, this increased functionality and flexibility comes at a cost of reduced application and transaction performance due to the increased processing overhead associated with these systems. Most applications do not require every feature that an RDBMS offers.
In a business environment, most applications use a large number of relational tables which define the valid set of values for a specific field on a transaction. These relational tables are accessed often as the computer system verifies that each field on a transaction is one of the valid values. This results in a large number of read requests to the RDBMS for table rows which degrades overall system performance. In addition, these relational tables must be available for updating through the RDBMS. However, updates to these relational tables seldom occur during the business day. In order to support the ability to change these tables at any time as well as maintain the constant availability of these tables, the RDBMS must retain the table within the RDBMS's input/output hierarchy. This degrades system performance even though the table maintenance functionality is rarely used.
Some applications use a subset or portion of a relational table. Moreover, some batch applications will process only a small portion of a complete relational table during any execution of that application. The application must have access to the complete table so that it can gain access to the subset of the table necessary for the execution of the application. Having the complete table available to the application when the application only requires a subset of the table causes additional processing overhead which could be avoided. This ultimately leads to degradation of application performance.
Batch applications typically share buffer pools with other batch applications running at the same time. Sharing of buffer pools results in a performance problem known as buffer stealing. The stealing of a buffer previously assigned to another application results in additional physical reads to the data in order to place the data in another buffer area. There is no way at the present time to prevent an application from using certain resources within the RDBMS's address space. In other words, users cannot systematically check out a complete relational table from the RDBMS and have it available in memory for the duration of the application.
Testing of applications using RDBMS technology is more complex than testing of applications which employ traditional methods of accessing and organizing data. Currently, there is no way to simulate updates to a relational table within an RDBMS without actually performing the update. Therefore, a test version of the database must be loaded by a database administrator before an application test can commence. In addition, if a test of an application must be rerun, the relational table must be reset, or reloaded, to the version which existed prior to the test execution of the application. This process usually requires the aid of a database administrator running a batch job to reload the database.
Applications developed using computer aided software engineering (CASE) technology traditionally do not perform as well as applications coded directly by a software engineer. One major performance issue with CASE developed applications centers around the inputting and outputting of data. Skilled CASE users can address these types of performance issues by employing certain performance improving techniques within the CASE tool. However, focusing on performance improvement during application development usually decreases the software engineer's productivity potential with the CASE tool. Currently, there are no products available which allow the software engineer to focus on development of an application program without paying attention to the overall performance needs of an application system.